package com.javaxiaobear.module.system.mapper;

import com.javaxiaobear.base.common.utils.PageUtils;
import com.javaxiaobear.module.system.domain.SysConfig;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import java.util.Arrays;
import java.util.List;

/**
 * 参数配置 数据层
 *
 * @author javaxiaobear
 */
public interface SysConfigMapper extends BaseMapper<SysConfig> {
  /**
   * 查询参数配置信息
   *
   * @param config 参数配置信息
   * @return 参数配置信息
   */
  default SysConfig selectConfig(SysConfig config) {
    QueryWrapper queryWrapper = QueryWrapper.create();
    if (config.getConfigId() != null) {
      queryWrapper.eq("config_id", config.getConfigId());
    }
    if (config.getConfigKey() != null && !config.getConfigKey().isEmpty()) {
      queryWrapper.eq("config_key", config.getConfigKey());
    }
    return selectOneByQuery(queryWrapper);
  }

  /**
   * 通过ID查询配置
   *
   * @param configId 参数ID
   * @return 参数配置信息
   */
  default SysConfig selectConfigById(Long configId) {
    return selectOneById(configId);
  }

  /**
   * 查询参数配置列表
   *
   * @param config 参数配置信息
   * @return 参数配置集合
   */
  default List<SysConfig> selectConfigList(SysConfig config) {
    QueryWrapper queryWrapper = QueryWrapper.create();
    if (config.getConfigName() != null && !config.getConfigName().isEmpty()) {
      queryWrapper.like("config_name", config.getConfigName());
    }
    if (config.getConfigType() != null && !config.getConfigType().isEmpty()) {
      queryWrapper.eq("config_type", config.getConfigType());
    }
    if (config.getConfigKey() != null && !config.getConfigKey().isEmpty()) {
      queryWrapper.like("config_key", config.getConfigKey());
    }
    // 处理时间范围查询
    if (config.getParams() != null) {
      String beginTime = (String) config.getParams().get("beginTime");
      String endTime = (String) config.getParams().get("endTime");
      if (beginTime != null && !beginTime.isEmpty()) {
        queryWrapper.ge("create_time", beginTime);
      }
      if (endTime != null && !endTime.isEmpty()) {
        queryWrapper.le("create_time", endTime);
      }
    }
    // 处理排序
    if (config.getOrderByColumn() != null && !config.getOrderByColumn().isEmpty()) {
      String orderBy =
          config.getOrderByColumn() + " " + (config.getIsAsc() != null ? config.getIsAsc() : "asc");
      queryWrapper.orderBy(orderBy);
    }
    return selectListByQuery(queryWrapper);
  }

  default Page<SysConfig> selectConfigPage(SysConfig config) {
    QueryWrapper queryWrapper = QueryWrapper.create();
    if (config.getConfigName() != null && !config.getConfigName().isEmpty()) {
      queryWrapper.like("config_name", config.getConfigName());
    }
    if (config.getConfigType() != null && !config.getConfigType().isEmpty()) {
      queryWrapper.eq("config_type", config.getConfigType());
    }
    if (config.getConfigKey() != null && !config.getConfigKey().isEmpty()) {
      queryWrapper.like("config_key", config.getConfigKey());
    }
    // 处理时间范围查询
    if (config.getParams() != null) {
      String beginTime = (String) config.getParams().get("beginTime");
      String endTime = (String) config.getParams().get("endTime");
      if (beginTime != null && !beginTime.isEmpty()) {
        queryWrapper.ge("create_time", beginTime);
      }
      if (endTime != null && !endTime.isEmpty()) {
        queryWrapper.le("create_time", endTime);
      }
    }
    // 处理排序
    if (config.getOrderByColumn() != null && !config.getOrderByColumn().isEmpty()) {
      String orderBy =
          config.getOrderByColumn() + " " + (config.getIsAsc() != null ? config.getIsAsc() : "asc");
      queryWrapper.orderBy(orderBy);
    }
    return paginate(PageUtils.getPage(), queryWrapper);
  }

  /**
   * 根据键名查询参数配置信息
   *
   * @param configKey 参数键名
   * @return 参数配置信息
   */
  default SysConfig checkConfigKeyUnique(String configKey) {
    QueryWrapper queryWrapper = QueryWrapper.create().eq("config_key", configKey).limit(1);
    return selectOneByQuery(queryWrapper);
  }

  /**
   * 新增参数配置
   *
   * @param config 参数配置信息
   * @return 结果
   */
  default int insertConfig(SysConfig config) {
    return insert(config);
  }

  /**
   * 修改参数配置
   *
   * @param config 参数配置信息
   * @return 结果
   */
  default int updateConfig(SysConfig config) {
    return update(config);
  }

  /**
   * 删除参数配置
   *
   * @param configId 参数ID
   * @return 结果
   */
  default int deleteConfigById(Long configId) {
    return deleteById(configId);
  }

  /**
   * 批量删除参数信息
   *
   * @param configIds 需要删除的参数ID
   * @return 结果
   */
  default int deleteConfigByIds(Long[] configIds) {
    return deleteBatchByIds(Arrays.asList(configIds));
  }
}
